package com.ht.api.call.func.impl.wwx;

import java.util.Map.Entry;

import javax.sql.DataSource;

import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.db.exception.HtException;
import com.ht.api.db.util.HtUtil;
import com.ht.api.open.OpenUtil;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 修改加入群聊
 * @author asq
 * @createTime 2025年1月13日 22:19:08
 */
@Slf4j
public class WwxJoinWayEditFunctionCall implements IFunctionCall {
	/** 接口ID：更新客户群进群方式配置 */
	private static final long API_ID_EDIT = 1900132756453724160L;

	@Override
	public String getName() {
		return "修改加入群聊";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取登陆用户的数据源
		DataSource ds = me.getDataSource();
		
		// 验证参数
		HtUtil.checkParam(param, "main_id");
		
		// 查询
		String mainId = param.getStr("main_id");
		Entity wxJoinWay = Db.createSqlParser("wx_join_way").findById(ds, mainId);
		if (wxJoinWay == null) {
			throw new HtException("数据不存在~");
		}
		
		// 根据前端参数赋值给wxJoinWay对象，后面直接保存
		for (Entry<String, Object> entry : param.entrySet()) {
			String key = entry.getKey();
			if ("qr_code_chat".equals(key)) {
				String old = wxJoinWay.getStr("qr_code_chat");
				Object newQrCodeChat = entry.getValue();
				if (newQrCodeChat != null && !newQrCodeChat.toString().equals(old)) {
					wxJoinWay.set("qr_code_chat_time", DateUtil.now());
					wxJoinWay.set("qr_code_chat_status", 0);
				}
				
				wxJoinWay.set(key, entry.getValue());
			} else {
				wxJoinWay.set(key, entry.getValue());
			}
		}
		
		// 如果有config_id字段，则需要调用企微接口
		boolean needSynWx = StrUtil.isNotBlank(wxJoinWay.getStr("config_id"));
		if (needSynWx) {
			// 调用企微接口
			String appId = wxJoinWay.getStr("appid");
			JSONObject wwxParam = JSONUtil.createObj();
			wwxParam.set("config_id", wxJoinWay.getStr("config_id"));
			wwxParam.set("scene", wxJoinWay.getInt("scene"));
			wwxParam.set("remark", wxJoinWay.getStr("remark"));
			wwxParam.set("auto_create_room", wxJoinWay.getStr("auto_create_room"));
			wwxParam.set("room_base_name", wxJoinWay.getStr("room_base_name"));
			wwxParam.set("room_base_id", wxJoinWay.getStr("room_base_id"));
			wwxParam.set("chat_id_list", JSONUtil.parseArray(wxJoinWay.getStr("chat")));
			String str = OpenUtil.call(appId, API_ID_EDIT, wwxParam);
			
			// 本地数据库
			JSONObject obj = JSONUtil.parseObj(str);
			if (obj.getInt("errcode") == 0) {
				Db.insert(ds, wxJoinWay);
			} else {
				throw new HtException("企微接口返回错误：" + obj.getStr("errmsg"));
			}
		} else {
			Db.insert(ds, wxJoinWay);
		}
		
		return JSONUtil.createObj();
	}
}
